package 类与对象.内部类.局部内部类;
/*
    局部内部类
        1.可以直接访问外部类的所有成员，包含私有的
        2.不能添加访问修饰符，因为它的地位就是一个局部变量，局部变量是不能使用修饰符的，
            但是可以使用final修饰，因为局部变量可以用final修饰
        3.作用域：仅仅在方法或者代码块中
        4.局部内部类访问外部类的成员-直接访问
        5.外部类访问局部内部类的成员-创建对象，再访问
        6.外部其他类不能访问局部内部类(因为局部内部类是个一个局部变量)
        7.如果外部类和局部内部内类的成员重名，默认遵循就近原则，如果想访问外部类的成员
            则可以使用：外部类名.this.成员
 */
public class LocalInnerClass {
    public static void main(String[] args) {
        Outer outer = new Outer();
        outer.demo();
    }
}

class Outer{//外部类
    private int n1 = 1;
    private void demo1(){
        System.out.println("demo1");
    }
    public void demo(){
        //局部内部类是定义在外部类的局部位置，通常在方法内部
        class Inner{//局部内部类
            private int n1 = 2;
            public void f1(){
                //局部内部类可以直接访问外部类的成员
                System.out.println("n1=" + n1+"\t外部n1变量=" +Outer.this.n1);
                demo1();
            }
        }
        Inner inner = new Inner();
        inner.f1();
    }
}